console.log('test')

// for in 和 for of 区别
// for in 遍历对象自身属性和原型链属性  遍历的是属性名或数组下标, 一般用来遍历对象
// for of 迭代对象自身属性  遍历的是属性值，不能用来遍历普通对象{}，只能用于可迭代对象
// 如Array, Map, Set, String, TypedArray, arguments对象等，（或者自身实现了symbol.iterator）
var obj = {
    name: 'ss',
    age: 18
}
obj.__proto__.sex = 1

var arr = [12, 13, 14]

for (let index in obj) {
    if (obj.hasOwnProperty(index)) { // 判断属性是不是对象自身属性
        console.log(index) // name age
    }
    console.log(index) // name age sex
}
for (let index in arr) {
    if (arr.hasOwnProperty(index)) {
        console.log(index); // 0 1 2
    }
    console.log(index) // 0 1 2 sex
}
for (let val of arr) {
    console.log(val) // 12 13 14
}
// for (let val of obj) { // 错误  对象不可迭代 不能使用for of
//     console.log(val)
// }

var sss = 'hello'
for (let val of sss) {
    console.log(val) // h e l l o
}
for (let val in sss) {
    console.log(val) // 0 1 2 3 4
}

console.log('--------Map--------')
// 创建map 初始值为二维数组初始化
let map = new Map([['张三', 80],['李四', 74],['王五', 90]])
map.set('赵六', 60)
console.log(map)
map.set('张三', 90)
console.log(map)
console.log(map.has('张三'))
console.log(map.get('张三'))

// for of 遍历map 的key value
for (let [key, val] of map) {
    console.log(key, val)
}
console.log(map.keys())
for (let key of map.keys()) {
    console.log(key, '-', map.get(key))
}
console.log(map.values())
for (let val of map.values()) {
    console.log(val)
}
map.delete('张三')
console.log('map的长度是:', map.size)


console.log('-------Set---------')
const set = new Set([1, 3, 2, 2, 5, 6, 6, 7, 8])
console.log(set)
set.add(100)
set.delete(10)
console.log('set是否存在100：', set.has(100))
for (let val of set) {
    console.log(val)
}
console.log("set的长度是:", set.size)